﻿using S7.Net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace S7Client.S7V1
{
    /// <summary>
    /// S7.Net 的简单使用
    /// </summary>
    internal class Program 
    { 
         void m1( )  
        {
            Plc plc = new Plc(CpuType.S71500, "192.168.0.100", 0, 1);
            plc.Open();

            // 接收键入的值
            string inputKey = "";
            bool boolFlag = false;
            short iCount = 1;

            // 读取 PLC 上的数据
            Task readPLCTask = Task.Factory.StartNew(() =>
            {
                while (plc.IsConnected && inputKey != "q")
                {
                    Console.Clear();
                    // 布尔量
                    Console.WriteLine(plc.Read("DB1.DBX0.0"));
                    // 整形量
                    Console.WriteLine(plc.Read("DB1.DBW2"));
                    // 数组字中的第一个元素
                    Console.WriteLine(plc.Read("DB1.DBW4"));
                    // 数组字中的剩余元素
                    short[] remainArr = (short[])plc.Read(DataType.DataBlock, 1, 6, VarType.Word, 9);
                    for (int i = 0; i < remainArr.Length; i++)
                    {
                        Console.Write(remainArr[i] + "\t");
                    }
                    Task.Delay(200).Wait();
                }
            });

            //  写入 PLC 数据
            Task writePLCTask = Task.Factory.StartNew(() =>
            {
                while (plc.IsConnected && inputKey != "q")
                {
                    // 布尔量
                    plc.Write("DB1.DBX0.0", boolFlag);
                    // 整形量
                    plc.Write("DB1.DBW2", iCount);
                    // 数组字中的第一个元素
                    plc.Write("DB1.DBW4", (short)(iCount * 2));
                    // 数组字中的剩余元素
                    short[] arrValues = new short[9]; // 你要写入的新值数组
                    for (int i = 0; i < arrValues.Length; i++)
                    {
                        arrValues[i] = (short)(iCount + 1 + i);
                    }
                    plc.Write("DB1.DBW6", arrValues);

                    iCount++;
                    boolFlag = !boolFlag;
                    Task.Delay(200).Wait();
                }
            });

            inputKey = Console.ReadLine();

            plc.Close();
            Task.WaitAll(readPLCTask, writePLCTask);
        }
    }

}
